@{
    ViewData["Title"] = "公章申请审批流程文档";
}

<h2>@ViewData["Title"]</h2>

<div class="card">
    <div class="card-body">
        <h4 class="card-title">审批流程说明</h4>
        <ol>
            <li>
                <strong>创建工作任务</strong>
                <p>系统通过IWorkTaskAdapterService.CreateWorkTaskWithDefaultVersionAsync方法创建工作任务</p>
                <ul>
                    <li>EntityFullName: 固定为"OfficialSealApplication"</li>
                    <li>EntityKeyValue: 使用申请记录的ID</li>
                    <li>Name: 生成格式为"公章使用申请 - [申请人] - [印章类型]"</li>
                    <li>WorkflowNo: 使用预定义的流程编号"WF20250528224424816"</li>
                    <li>FormData: 将申请记录序列化为JSON作为表单数据</li>
                </ul>
            </li>
            <li>
                <strong>检查状态记录</strong>
                <p>系统检查是否已存在相同实体的WorkTaskStateInfo记录</p>
                <ul>
                    <li>如果存在且状态不是Pending或Canceled，则不允许重复提交</li>
                    <li>如果不存在，则创建初始状态记录(状态为Pending)</li>
                </ul>
            </li>
            <li>
                <strong>更新申请记录</strong>
                <p>将返回的WorkTaskId(Guid)转换为字符串并保存到申请记录的WorkTaskId字段</p>
            </li>
            <li>
                <strong>启动工作流程(核心步骤)</strong>
                <p>系统通过IWorkTaskAdapterService.StartWorkTaskAsync方法启动工作流程</p>
                <div class="alert alert-info">
                    <h5>技术原理：</h5>
                    <ul>
                        <li>使用工作流引擎的StartWorkTaskInputDto传入WorktaskId</li>
                        <li>工作流引擎会根据预定义的流程编号(WF20250528224424816)启动对应流程</li>
                        <li>流程会自动处理审批节点、通知审批人等后续操作</li>
                        <li>状态变更通过事件机制同步到WorkTaskStateInfo表</li>
                        <li>使用工作流引擎的版本控制机制确保流程定义一致性</li>
                    </ul>
                </div>
            </li>
            <li>
                <strong>状态同步机制(核心步骤)</strong>
                <p>系统通过事件处理器实现状态自动同步</p>
                <div class="alert alert-info">
                    <h5>技术原理：</h5>
                    <ul>
                        <li>工作流引擎在状态变更时会触发TaskStateChangeEvent事件</li>
                        <li>CustomTaskStateChangeEventEventHandlerExtension处理该事件</li>
                        <li>处理器会更新WorkTaskStateInfo表中的状态记录</li>
                        <li>前端通过刷新获取最新状态</li>
                        <li>状态显示使用GetWorkTaskStatusDisplayName方法转换友好名称</li>
                        <li>事件处理采用事务机制确保数据一致性</li>
                    </ul>
                </div>
            </li>
        </ol>

        <div class="mt-4">
            <h5>流程结果处理</h5>
            <ul>
                <li>成功: 重定向到详情页并显示成功消息</li>
                <li>失败: 重定向到详情页或列表页并显示错误消息</li>
            </ul>
            
            <h5 class="mt-3">相关工作流</h5>
            <p>工作流编号: WF20250528224424816</p>
        </div>
    </div>
</div>

<div class="mt-3">
    <a asp-action="Index" class="btn btn-secondary">返回列表</a>
</div>
